Dataformのクライアントライブラリ(python)を使ってみる(その1)

Dataformのクライアントライブラリ(python)を使ってみる(その1)

Clock Icon2024.09.18

概要

Dataformにはpythonのクライアントライブラリが用意されています。python以外にもGo、Java、Node.jsのクライアントライブラリがあります。
https://cloud.google.com/dataform/docs/reference/libraries?hl=ja

クライアントライブラリを用いることでDataform APIをREST APIを用いるより簡潔に呼び出すことができます。
https://cloud.google.com/dataform/reference/rest

今回はpythonのクライアントライブラリを実際に使ってみてDataformの操作をしてみました。

動かしてみる

準備

まずはDataformのクライアントライブラリをインストールします。

pip install google-cloud-dataform

今回はCloud Shell上で実行するので特に認証情報は設定しませんがローカルで試す場合などは適宜認証情報を設定してください。
https://cloud.google.com/docs/authentication/application-default-credentials?hl=ja

ワークスペースの一覧を取得してみる

インストールできて認証情報を設定できたらあと動かすだけです。

リファレンスを見て好きなことをしてみましょう。
https://cloud.google.com/python/docs/reference/dataform/latest

とりあえずワークスペースの一覧を取得してみます。
ワークスペース一覧取得は以下のAPIでできるようです。
https://cloud.google.com/python/docs/reference/dataform/latest/google.cloud.dataform_v1beta1.services.dataform.DataformClient#google_cloud_dataform_v1beta1_services_dataform_DataformClient_list_workspaces

リファレンスを元に実装してみました。

from google.cloud import dataform_v1beta1

def list_workspaces(project_id, location, repository_id):
    client = dataform_v1beta1.DataformClient()

    repository_path = client.repository_path(project_id, location, repository_id)

    request = dataform_v1beta1.ListWorkspacesRequest(
        parent=repository_path
    )

    page_result = client.list_workspaces(request=request)

    for response in page_result:
        print(response)

if __name__ == "__main__":
    project_id = "プロジェクトID"
    location = "リージョン"
    repository_id = "リポジトリ名"
    list_workspaces(project_id, location, repository_id)

簡単に説明します。

from google.cloud import dataform_v1beta1

pipでインストールしたDataformクライアントライブラリを読み込んでいます。この中に今回やりたいことが詰まっています。

client = dataform_v1beta1.DataformClient()

Dataformのクライアントインスタンスを作成します。

 repository_path = client.repository_path(project_id, location, repository_id)

repository_pathを用いてリポジトリパスを作成しています。
https://cloud.google.com/python/docs/reference/dataform/latest/google.cloud.dataform_v1beta1.services.dataform.DataformClient#google_cloud_dataform_v1beta1_services_dataform_DataformClient_parse_repository_path

このAPIを用いなくても実装できるのですが、その場合は自分で以下の形式で
リポジトリパスを作成する必要があります。

projects/プロジェクトID/locations/リージョン/repositories/リポジトリ名

せっかくなので使ってみました。

page_result = client.list_workspaces(request=request)
for response in page_result:
        print(response)

list_workspacesを用いてワークスペースの一覧を取得します。page_resultにワークスペース一覧が詰まっているのでfor文でループしてprintします。

スクリプトを実行すると以下のような出力がされます。

name: "projects/プロジェクトid/locations/asia-northeast1/repositories/リポジトリ名/workspaces/ワークスペース名1"

name: "projects/プロジェクトid/locations/asia-northeast1/repositories/リポジトリ名/workspaces/ワークスペース名2"

name: "projects/プロジェクトid/locations/asia-northeast1/repositories/リポジトリ名/workspaces/ワークスペース名3"

※ワークスペース名などは環境によって異なります。

リポジトリの一覧を取得してみる

せっかくなのでもう一つAPIを叩いてみます。
リポジトリ一覧を取得してみます。
https://cloud.google.com/python/docs/reference/dataform/latest/google.cloud.dataform_v1beta1.services.dataform.DataformClient#google_cloud_dataform_v1beta1_services_dataform_DataformClient_list_repositories

from google.cloud import dataform_v1beta1

def list_repositories(project_id, location):
    client = dataform_v1beta1.DataformClient()

    parent = f"projects/{project_id}/locations/{location}"

    request = dataform_v1beta1.ListRepositoriesRequest(
        parent=parent
    )

    page_result = client.list_repositories(request=request)
    for response in page_result:
        print(response)
if __name__ == "__main__":
    project_id = "プロジェクトID"
    location = "リージョン"
    list_repositories(project_id, location)

さきほどとほぼ同様のコードです。違いは引数にリポジトリ名が不要になった点でしょうか。

実行すると、以下のような出力になりました。

name: "projects/プロジェクトID/locations/リージョン/repositories/リポジトリ名1"

name: "projects/プロジェクトID/locations/リージョン/repositories/リポジトリ名2"

※環境によって異なります。上記は出力イメージです。

まとめ

クライアントライブラリは当然DataformのREST APIと使い勝手がことなります。
https://cloud.google.com/dataform/reference/rest
REST APIは言語を選ばずに使うことができ汎用性が高いですが(HTTPリクエストができる言語なら)、クライアントライブラリは各種言語ごとに用意されたものしか使うことができません。しかしながらクライアントライブラリは認証が簡素化されている・エラーハンドリングやページネーションなど様々な使い勝手が良いなど多くのメリットがあります。
どちらも優れた面があるのでワークロードによって選択するとよいと考えます。

今回は簡単な動作確認程度のことしかしていませんが、次はもう少し発展的なこと(リポジトリ内のファイルを取得する、ワークフローを起動するなど)をやってみたいと思います。
それではまた。

参考

https://cloud.google.com/python/docs/reference/dataform/latest

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.